package org.example.queue;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @description: 消息生产者
 */
public class ProducerTest {

    //队列名称
    public static final String QUEUE_HELLOWORD = "helloworld";

    /**
     * 步骤：
     * 1、创建连接
     * 2、创建信道
     * 3、创建队列
     * 4、准备消息
     * 5、发送消息
     */
    public static void main(String[] args) throws Exception {
        //定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置连接的mq服务器的IP地址
        factory.setHost("localhost");
        Connection connection =null;
        try{

            //1、创建连接，通过工厂获取连接
            //写在try里面，含义是：到时候会自动关闭连接
            connection = factory.newConnection();

            //2、创建信道
            Channel channel = connection.createChannel();
            //3、创建队列
            /**
             * 声明队列，如果RabbitMQ中没有此队列将自动创建
             * param1:队列名称
             * param2:是否持久化
             * param3:队列是否独占此连接
             * param4:队列不再使用时是否自动删除此队列
             * param5:队列参数
             */
            channel.queueDeclare(QUEUE_HELLOWORD, true, false, false, null);

            for(int i = 0 ; i < 100 ; i++){
            //4、准备消息
            String message = i+"这是一个Hello World消息-2022年3月16日";
            //5、发送消息
                channel.basicPublish("", QUEUE_HELLOWORD, null, message.getBytes());
                System.out.println("消息发送完毕");
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (connection != null) {
                connection.close();
            }
        }
    }
}